// poj2115
// 题意：一个数初始为A，不断在模2^k意义下加C，求第一次加到B的次数。
//       如果不行输出"FOREVER"
//
// 题解：设次数为x，则 (A + x*C) 同余于 B(mod 2^k), 
//       即x*C 同余于 (B-A)(mod 2^k)
//
// run : $exec < input > output
#include <iostream>

typedef long long value_type;

value_type gcd(value_type a, value_type b)
{
	return (!b) ? a : gcd(b, a % b);
}

void extended_gcd(value_type a,  value_type b, value_type & d, value_type & x, value_type & y)
{
	if (!b) { d = a; x = 1; y = 0; }
	else {
		extended_gcd(b, a % b, d, y, x);
		y -= x * (a/b);
	}
}

value_type umsole(value_type a, value_type b, value_type p)
	// univariate_modular_system_of_linear_equation
{
	// a*x  is congruent to  b  modulo  p
	// => a*x + p*(-y) = b
	value_type x, y, b0;
	extended_gcd(a, p, b0, x, y);
	value_type m = p / b0;
	return ((x * (b / b0)) % m + m) % m;
}

int main()
{
	value_type a, b, c, k;
	while (std::cin >> a >> b >> c >> k && (a || b || c || k)) {
		k = 1ll << k;
		b -= a;
		b = ((b % k) + k) % k;
		if (b % gcd(c, k)) {
			std::cout << "FOREVER\n";
			continue;
		}
		std::cout << umsole(c, b, k) << '\n';
	}
}

